今天終於能把查詢物品拍賣價格網址這功能講完了(汗)
物品拍賣價格網址目前熱門的是universalis
要讓查詢的物品能夠辨識出他是在哪個頁面主要有三個步驟:
辨識使用者的意圖明確是來查詢物品價格
因此樣板式模型會是比較好的做法,也就是透過前綴的規則來辨識使用者的意圖
辨識物品名稱
透過第二天建立的字典來辨識物品名稱
將物品名稱轉換成ID
由於universalis的物品網址後面是帶物品ID,因此需將物品名稱轉換成ID,字典裡也有ID所以也很好解決
在測試期間發現容易打錯字,所以又加了個模糊搜尋功能讓查詢可以更方便
模糊搜尋功能我是用python套件difflib來實現,python就有自帶difflib了所以不用另外裝
附上程式碼
import discord
import requests
import pandas as pd
import pickle
import difflib
from dotenv import load_dotenv
if __name__ == '__main__':
#讀取Token
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
intents = discord.Intents.default()
intents.members = True
client = discord.Client(intents=intents)
embed = discord.Embed()
@client.event
#當有訊息時
async def on_message(message):
#排除自己的訊息,避免陷入無限循環
if message.author == client.user:
return
#查市價
elif message.content.startswith('?bs '):
user_word = message.content.replace('?bs ',"")
if user_word in item_dict:
if "ID" in item_dict[user_word]:
embed.description = f"[{user_word}價格網址](https://universalis.app/market/{item_dict[user_word]['ID']})"
await message.reply(embed=embed, mention_author=True)
else:
embed.description = f"[{user_word}價格網址](https://universalis.app/market/{user_word})"
await message.reply(embed=embed, mention_author=True)
else:
#模糊搜尋
wordsim_list = difflib.get_close_matches(user_word,wordlist,10,cutoff=0.1)
if len(wordsim_list) > 0:
embed.description ="你可能要查詢的詞:\n"+"\n".join(wordsim_list)
await message.reply(embed=embed, mention_author=True)
else:
await message.reply("無相關資訊")
執行程式後功能呈現如下: